package xiangya.bysj.service.interf;

import java.util.List;

import xiangya.bysj.entity.HistoryTake;
import xiangya.bysj.entity.Patient;
import xiangya.bysj.entity.TakeInfo;

/**
 * 历史服药记录接口
 * 
 * @author Mr.zhang
 *
 */
public interface HistoryTakeServiceInterface extends ServiceInterface<HistoryTake> {
	/**
	 * 根据分页查询
	 * 
	 * @param currentPage
	 *            当前需要查询的也码
	 * @param pageNum
	 *            每一页的数目
	 * @return HistoryTake集合
	 * @throws Exception
	 */
	public List<HistoryTake> getByPage(int currentPage, int pageNum, int userId) throws Exception;

	/**
	 * 批量产生当天的服药记录（根据服药信息）
	 * 
	 * @throws Exception
	 */
	public void produceBatch() throws Exception;

	/**
	 * 获得对应患者当天的服药记录
	 * 
	 * @param patientId
	 *            患者id
	 * @param today
	 *            当天
	 * @return list集合
	 * @throws Exception
	 */
	public List<HistoryTake> getTodayRecByPatientId(int patientId, String today) throws Exception;

	/**
	 * 通过user获取历史记录（获取当天记录）
	 * 
	 * @param userId
	 *            用户id
	 * @return list集合
	 * @throws Exception
	 */
	public List<HistoryTake> getByUser(int userId) throws Exception;

	/**
	 * 获取患者列表的所有服药信息
	 * 
	 * @param patients
	 *            患者list集合
	 * @param isToday
	 *            是否是当天 true当天false全部
	 * @return 服药记录list集合
	 * @throws Exception
	 */
	public List<HistoryTake> getByPatients(List<Patient> patients, boolean isToday) throws Exception;

	/**
	 * 通过患者删除
	 * 
	 * @param patientId
	 *            患者id
	 * @return 成功返回true
	 * @throws Exception
	 */
	public boolean deleteByPatient(int patientId, int medicId) throws Exception;

	/**
	 * 根据患者以及药品id获取有多少条服药信息
	 * 
	 * @param patientId
	 *            患者id
	 * @param medicId
	 *            药品id
	 * @return 条数
	 * @throws Exception
	 */
	public int getNumberByPatient(int patientId, int medicId) throws Exception;

	/**
	 * 根据患者和药品获取根据日期、服药心得分组后的信息
	 * 
	 * @param patientId
	 *            患者id
	 * @param medicId
	 *            药品id
	 * @return list集合 （这里只会放回三个数据：日期、心得、改日期下服药次数‘histStatus’）
	 * @throws Exception
	 */
	public List<HistoryTake> getByPatient(int patientId, int medicId) throws Exception;

	/**
	 * 跟新服药心得
	 * 
	 * @param patientId
	 *            患者id
	 * @param medicId
	 *            药品id
	 * @param record
	 *            心得
	 * @param date
	 *            日期
	 * @return
	 * @throws Exception
	 */
	public boolean updateRecord(int patientId, int medicId, String record, String date) throws Exception;

	/**
	 * 批量生成历史服药记录
	 * 
	 * @param takeinfos
	 *            服药信息的list集合
	 * @return 生成条数
	 * @throws Exception
	 */
	public int createHistBatch(List<TakeInfo> takeinfos) throws Exception;

	/**
	 * 通过服药信息id，删除今天还没有服用的历史记录
	 * 
	 * @param tkId
	 *            服药信息id
	 * @return 删除条数
	 * @throws Exception
	 */
	public int deleteTodayByTk(int tkId) throws Exception;

	/**
	 * 通过用户id获取
	 * 
	 * @param userId
	 *            用户id
	 * @return 历史服用记录
	 * @throws Exception
	 */
	public List<HistoryTake> getAlert(int userId,boolean isAlert,String time) throws Exception;

}
